package QRCode

import (
	"image"
	_ "image/jpeg" // 导入JPEG解码器
	_ "image/png"  // 导入PNG解码器
	"net/http"
	"os"

	"github.com/makiuchi-d/gozxing"
	"github.com/makiuchi-d/gozxing/qrcode"
)

func DecodeHttpFile(url string) (string, error) {
	// 打开二维码图片文件
	resp, err := http.Get(url)
	if err != nil {
		return "", err
	}
	defer resp.Body.Close()

	// 解码图像
	img, _, err := image.Decode(resp.Body)
	if err != nil {
		return "", err
	}

	return DecodeImage(img)
}

func DecodeFile(fileName string) (string, error) {
	// 打开二维码图片文件
	file, err := os.Open(fileName)
	if err != nil {
		return "", err
	}
	defer file.Close()

	// 解码图像
	img, _, err := image.Decode(file)
	if err != nil {
		return "", err
	}

	return DecodeImage(img)
}

func DecodeImage(img image.Image) (string, error) {
	// 将图像转换为二进制位图
	bmp, err := gozxing.NewBinaryBitmapFromImage(img)
	if err != nil {
		return "", err
	}

	// 创建QR解码器实例
	qrReader := qrcode.NewQRCodeReader()

	// 解码二维码内容
	result, err := qrReader.Decode(bmp, nil)
	if err != nil {
		return "", err
	}

	return result.GetText(), nil
}
